package com.booksystem.campuslibrarymanagementsystem.controller.mainactivity;

import com.booksystem.campuslibrarymanagementsystem.commen.request.mainactivityrequest.Submit.AddSubmit;
import com.booksystem.campuslibrarymanagementsystem.commen.result.Result;
import com.booksystem.campuslibrarymanagementsystem.entity.AccountTable;
import com.booksystem.campuslibrarymanagementsystem.entity.UserTable;
import com.booksystem.campuslibrarymanagementsystem.service.AccountTableService;
import com.booksystem.campuslibrarymanagementsystem.service.UserTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/MainActivity")
@Api(tags = "注册信息提交")
public class SubmitController {
    AccountTable accountTable = new AccountTable();
    @Autowired
    private UserTableService userTableService;
    @Autowired
    private AccountTableService accountTableService;


    /**
     * 注册信息提交接口。
     *@RequestBody AddSubmit（account学号，name名字，password密码，email邮箱）
     * 1.判断学号，名字，密码，邮箱信息是否填写完整
     * 2.不完整：返回失败信息-请将信息填写完整。完整：判断输入的账户长度是否符合全数字长度为9
     * 3.不符合：返回失败信息-请注意！学号长度为 9。符合：判断邮箱格式是否为qq邮箱
     * 4.不是：返回失败信息-无效的qq邮件地址。是：判断输入的密码格式是否为英文和数字的组合，并且长度为6
     * 5.不是：返回失败信息-密码长度为6，同时包含至少一个数字和一个英文字符。是：将输入的学号在user表中查询是否存在
     * 6.不存在：返回失败信息-"没有找到学号为" + ids + "的user信息"。存在：判断该账户在user表内的状态（启动，未启动）
     * 7.启动：返回失败信息-该账户已启动请勿重复提交。未启动：判断输入的名字和数据库中的名字是否一致
     * 8.不一致：返回失败信息-"学号为" + addSubmit.getAccount() + "的user信息与输入的姓名" + addSubmit.getName() + "不符合"。一致：返回成功信息-注册信息填写完成，请等待管理员通过
     * @return Result.success();or @return Result.fail();
     */
    @PostMapping("/Submit")
    @ApiOperation(value = "注册信息提交", notes = "输入学号，名字，qq邮箱，密码进行提交")
    public Result Submit(@RequestBody AddSubmit addSubmit) {
        if (addSubmit.getAccount().isEmpty() || addSubmit.getName().isEmpty() || addSubmit.getEmail().isEmpty() || addSubmit.getPassword().isEmpty()) {
            return Result.fail("请将信息填写完整");
        } else {
            if (addSubmit.getAccount().matches("^\\d{9}$")) {
                if (addSubmit.getEmail().matches("^[1-9]\\d{0,9}@qq\\.com$")) {
                    if (addSubmit.getPassword().matches("^(?=.*\\d)(?=.*[a-zA-Z])[a-zA-Z\\d]{6}$")) {
                        int ids = Integer.parseInt(addSubmit.getAccount());
                        UserTable userTable = userTableService.queryByIds(ids);
                        if (userTable != null) {
                            AccountTable accountTable1 = accountTableService.queryByAccount(addSubmit.getAccount());
                            if (accountTable1 ==null){
                                if (userTable.getState().equals("未启动")){
                                    if (addSubmit.getName().equals(userTable.getName())) {
                                        accountTable.setAccount(addSubmit.getAccount());
                                        accountTable.setName(addSubmit.getName());
                                        accountTable.setPassword(addSubmit.getPassword());
                                        accountTable.setSalt("");
                                        accountTable.setEmail(addSubmit.getEmail());
                                        accountTable.setIdentity("user");
                                        accountTable.setState("未通过");
                                        boolean a = accountTableService.save(accountTable);
                                        System.out.println( addSubmit.getName() + "信息提交成功");
                                        return Result.success("注册信息填写完成，请等待管理员通过", 1);
                                    } else {
                                        return Result.fail("学号为" + addSubmit.getAccount() + "的user信息与输入的姓名" + addSubmit.getName() + "不符合");
                                    }
                                }else if (userTable.getState().equals("已启动")){
                                    return Result.fail("该账户已启动请勿重复提交");
                                }else if (userTable.getState().equals("已停用")){
                                    return Result.fail("该账户已被停用");
                                }else {
                                    return Result.fail("该账户在user表内状态异常");
                                }
                            }else {
                                return Result.fail("请勿重复提交");
                            }


                        } else {
                            return Result.fail("没有找到学号为" + ids + "的user信息");
                        }
                    } else {
                        return Result.fail("密码长度为6，同时包含至少一个数字和一个英文字符");
                    }
                } else {
                    return Result.fail("无效的qq邮件地址");
                }
            } else {
                return Result.fail("请注意！学号长度为 9");
            }
        }


    }
}
